# -*- coding: utf-8 -*-
# Python中默认的编码格式是 ASCII 格式，在没修改编码格式时无法正确打印汉字，所以在读取中文时会报错。

# https://www.cnblogs.com/angelyan/p/11121859.html

# Python是一门弱类型的语言，很多时候我们可能不清楚函数参数类型或者返回值类型，很有可能导致一些类型没有指定方法，在写完代码一段时间后回过头看代码，
# 很可能忘记了自己写的函数需要传什么参数，返回什么类型的结果，就不得不去阅读代码的具体内容，降低了阅读的速度，typing模块可以很好的解决这个问题

# typing作用
# 类型检查，防止运行时出现参数和返回值类型不符合。
# 该模块加入后并不会影响程序的运行，不会报正式的错误，只有提醒pycharm目前支持typing检查，参数类型错误会黄色提示.


from typing import List, Union

def func(a: int, string: str) -> List[int or str]:
    list1 = []
    list1.append(a)
    list1.append(string)
    return list1

# 使用or关键字表示多种类型,也可以用Union
def get_next_id(id: int) -> Union[int, None]:
    if not isinstance(id ,int):
        return
    if id>1:
        return id
    return None


print(func(88,"999"))
print(get_next_id(999))

#pycharm会在传入的参数上黄色提示
print(func(88,["999"]))
print(get_next_id('999'))


# 自己实验
def get_next_id_2(id: int) -> Union[list, None]:
    if not isinstance(id ,int):
        return
    if id>1:
        return id
    return None

print(get_next_id_2('999'))


# 自己总结
# 入参 使用id:int 如果类型不一样，在调用函数时，传参会有黄色显示
# 返回 使用List[int or str]，Union[int, None]，如果返回有错误，return时有黄色显示
# 类型错误，并不影响运行



